πŸš€ Java 쀑급 1편 핡심 μš”μ•½ 총정리

NOTE

Object 클래슀, λΆˆλ³€ 객체, String, 래퍼/Enum, java.time, 쀑첩/읡λͺ… 클래슀, μ˜ˆμ™Έ 처리 λ“± Java 쀑급 1편 핡심 μš”μ•½.

πŸ“Œ κ°œλ…

1. Object 클래슀: λͺ¨λ“  객체의 뿌리

  • κ°œλ…: μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” μ΅œμƒμœ„ λΆ€λͺ¨μΈ Objectλ₯Ό μžλ™μœΌλ‘œ μƒμ†λ°›μŠ΅λ‹ˆλ‹€.
  • μ™œ μ‚¬μš©ν•˜λŠ”κ°€?: 곡톡 κΈ°λŠ₯을 μ œκ³΅ν•˜κ³ , λͺ¨λ“  객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” λ‹€ν˜•μ„±μ˜ 정점을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • 핡심 λ©”μ„œλ“œ:
    • toString(): 객체의 μƒνƒœλ₯Ό λ¬Έμžμ—΄λ‘œ ν‘œν˜„ (디버깅 ν•„μˆ˜).
    • equals(): **동일성(==, μ£Όμ†Œκ°’)**이 μ•„λ‹Œ 동등성(논리적 κ°™μŒ) 비ꡐλ₯Ό μœ„ν•΄ λ°˜λ“œμ‹œ μ˜€λ²„λΌμ΄λ”© ν•„μš”.
    • hashCode(): equalsλ₯Ό μž¬μ •μ˜ν–ˆλ‹€λ©΄ ν•΄μ‹œ 기반 μ»¬λ ‰μ…˜μ„ μœ„ν•΄ λ°˜λ“œμ‹œ ν•¨κ»˜ μž¬μ •μ˜.

2. λΆˆλ³€ 객체 (Immutable Object): μ•ˆμ „ν•œ 곡유

  • κ°œλ…: 객체 생성 ν›„ λ‚΄λΆ€μ˜ μƒνƒœ(ν•„λ“œ)λ₯Ό λ³€κ²½ν•  수 μ—†λŠ” 객체.
  • μ™œ μ‚¬μš©ν•˜λŠ”κ°€?: μ—¬λŸ¬ λ³€μˆ˜κ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•  λ•Œ λ°œμƒν•˜λŠ” **μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ(Side Effect)**λ₯Ό μ›μ²œ μ°¨λ‹¨ν•©λ‹ˆλ‹€.
  • 핡심 섀계:
    • ν•„λ“œλ₯Ό final둜 μ„ μ–Έν•˜κ³  Setterλ₯Ό λ§Œλ“€μ§€ μ•ŠμŒ.
    • κ°’ 변경이 ν•„μš”ν•˜λ©΄ κΈ°μ‘΄ 객체λ₯Ό μˆ˜μ •ν•˜λŠ” λŒ€μ‹ , λ³€κ²½λœ 값을 κ°€μ§„ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜.

3. String 클래슀: λ¬Έμžμ—΄μ˜ λͺ¨λ“  것

  • νŠΉμ§•: μžλ°”μ˜ String은 λŒ€ν‘œμ μΈ λΆˆλ³€ κ°μ²΄μž…λ‹ˆλ‹€.
  • String Pool: λ¦¬ν„°λŸ΄λ‘œ μƒμ„±λœ λ¬Έμžμ—΄μ€ νž™ μ˜μ—­μ˜ μ „μš© 곡간에 μ €μž₯λ˜μ–΄ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•©λ‹ˆλ‹€.
  • μ„±λŠ₯ μ΅œμ ν™”:
    • λ‹¨μˆœ λ¬Έμžμ—΄ 연결은 μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”ν•΄ μ£Όμ§€λ§Œ, 반볡문 λ‚΄ 연결은 λ°˜λ“œμ‹œ StringBuilderλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • StringBuilderλŠ” κ°€λ³€(Mutable)μ΄λ―€λ‘œ λ‚΄λΆ€ 버퍼λ₯Ό 직접 μˆ˜μ •ν•˜μ—¬ μ„±λŠ₯이 λ›°μ–΄λ‚©λ‹ˆλ‹€.

4. 래퍼 클래슀 & Enum: νƒ€μž… μ•ˆμ „μ„±

  • Wrapper Class: int 같은 κΈ°λ³Έν˜•μ„ Integer 같은 객체둜 κ°μ‹ΈλŠ” 것. null ν‘œν˜„μ΄ κ°€λŠ₯ν•˜κ³  μ œλ„€λ¦­μ—μ„œ ν•„μˆ˜μž…λ‹ˆλ‹€. (μ˜€ν†  λ°•μ‹±/μ–Έλ°•μ‹± 지원)
  • Enum (μ—΄κ±°ν˜•): κ΄€λ ¨ μžˆλŠ” μƒμˆ˜λ₯Ό λͺ¨μ•„ μ •μ˜ν•œ νŠΉμˆ˜ν•œ 클래슀.
    • μž₯점: ν—ˆμš©λ˜μ§€ μ•ŠλŠ” 값이 λ“€μ–΄μ˜€λŠ” 것을 컴파일 μ‹œμ μ— λ§‰μ•„μ£ΌλŠ” νƒ€μž… μ•ˆμ „μ„± 제곡.
    • ν™œμš©: λ‹¨μˆœ μƒμˆ˜λ₯Ό λ„˜μ–΄ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•΄ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 내포할 수 있음.

5. λ‚ μ§œμ™€ μ‹œκ°„ (java.time): ν‘œμ€€ API

  • κ°œλ…: Java 8λΆ€ν„° λ„μž…λœ LocalDate, LocalDateTime λ“±.
  • μ™œ μ‚¬μš©ν•˜λŠ”κ°€?: κΈ°μ‘΄ Date, Calendar의 결함(κ°€λ³€μ„±, λ³΅μž‘ν•œ μ›” 계산 λ“±)을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž….
  • 핡심 νŠΉμ§•:
    • λΆˆλ³€(Immutable): λͺ¨λ“  계산 λ©”μ„œλ“œλŠ” μƒˆλ‘œμš΄ 객체λ₯Ό λ°˜ν™˜ν•¨.
    • λͺ…ν™•μ„±: Period(λ‚ μ§œ 차이), Duration(μ‹œκ°„ 차이) λ“±μœΌλ‘œ ꡬ뢄이 λͺ…확함.

6. 쀑첩 & 읡λͺ… 클래슀: μΊ‘μŠν™”μ˜ 극치

  • 정적 쀑첩 클래슀: μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λ°€μ ‘ν•˜μ§€λ§Œ μΈμŠ€ν„΄μŠ€ κ°„ κ³΅μœ κ°€ 없을 λ•Œ μ‚¬μš©.
  • λ‚΄λΆ€ 클래슀: μ™ΈλΆ€ μΈμŠ€ν„΄μŠ€μ˜ 멀버에 μ ‘κ·Όν•΄μ•Ό ν•  λ•Œ μ‚¬μš©.
  • 읡λͺ… 클래슀: 이름 없이 μ¦‰μ„μ—μ„œ μΈν„°νŽ˜μ΄μŠ€/클래슀λ₯Ό κ΅¬ν˜„. μΌνšŒμ„± λ‘œμ§μ— 쓰이며, μžλ°” 8λΆ€ν„°λŠ” **λžŒλ‹€(Lambda)**둜 λŒ€μ²΄ κ°€λŠ₯.

7. μ˜ˆμ™Έ 처리 (Exception): ν”„λ‘œκ·Έλž¨μ˜ 방어막

  • μ˜ˆμ™Έ 계측: Throwable β†’ Error(μ‹œμŠ€ν…œ μž₯μ• ) & Exception(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ˜ˆμ™Έ).
  • 체크 μ˜ˆμ™Έ vs 언체크 μ˜ˆμ™Έ:
    • Checked: μ»΄νŒŒμΌλŸ¬κ°€ 처리λ₯Ό κ°•μ œν•¨. 외뢀에 μ˜μ‘΄ν•˜λŠ” λ‘œμ§μ— μ‚¬μš©.
    • Unchecked (RuntimeException): 개발자의 μ‹€μˆ˜λ‘œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έ. μ²˜λ¦¬κ°€ κ°•μ œλ˜μ§€ μ•ŠμŒ.
  • Try-With-Resources: AutoCloseable을 κ΅¬ν˜„ν•œ μžμ›μ„ μžλ™μœΌλ‘œ λ‹«μ•„μ€Œ (λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€).

πŸ“Ž ν•™μŠ΅ ν›„κΈ°

β€œμžλ°” 쀑급 1νŽΈμ€ λ‹¨μˆœνžˆ 문법을 λ°°μš°λŠ” 과정이 μ•„λ‹ˆλΌ, **객체 μ§€ν–₯ μ„€κ³„μ˜ 핡심인 β€˜λΆˆλ³€μ„±β€™κ³Ό β€˜νƒ€μž… μ•ˆμ „μ„±β€™**을 μ–΄λ–»κ²Œ 싀무 μ½”λ“œλ‘œ λ…Ήμ—¬λ‚΄λŠ”μ§€ λ°°μš°λŠ” κ³Όμ •μ΄μ—ˆλ‹€.”